using RayDen.Library.Core;
using RayDen.Library.Core.Primitives;

namespace RayDen.Library.Entity.Interface {
    public interface ICamera {
        Point Position { get; set; }
        Vector Target { get; set; }
        Vector Right { get; set; }
        Vector Up { get; set; }
        Vector Look { get; set; }
        float Fov { get; set; }
        float ZNear { get; set; }
        float ZFar { get; set; }

        void LookAt(Point vector, Point vector_2, Vector vector_3);

        void GetRay(double x, double y, out IRay cameraRay);

        void Sample(float x, float y,float u0, float u1, float u2, out IRay ray, out float pdf);
    }
}